Java位操作-移位总结

1.除2倒取余法

根据二进制的计算方法,输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2…依次循环,直到商为0结束。把余数倒着输出,就得到了转换后的二进制数。

可以用int来存储最后的二进制数,每次求余后把余数存储在int型数的低位,依次递增。

1
2
3
4
5
6
7
8
9
10
11
12
 1   public void Decimal2binary(int n){
2 int t = 0; //用来记录位数
3 int bin = 0; //用来记录最后的二进制数
4 int r = 0; //用来存储余数
5 while(n != 0){
6 r = n % 2;
7 n = n / 2;
8 bin += r * Math().pow(10,t);
9 t++;
10 }
11 System.out.println(bin);
12 }

但是int只能表示2^31-1 的正数,存储的二进制数位数有限;所以可以使用字符串的拼接(+)来实现,代码如下:

1
2
3
4
5
6
7
8
1  public void Decimal2binary(int n){
2 String str = "";
3 while(n!=0){
4 str = n%2+str;
5 n = n/2;
6 }
7 System.out.println(str);
8 }

2. 移位实现

利用移位操作对一个十进制数进行移位操作,将最高位的数移至最低位(移31位),使用按位 & 操作,可以使用和1相与(&),然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 ,代码如下。

1
2
3
4
1 public void Decimal2binary(int n){
2 for(int i = 31;i >= 0; i--)
3 System.out.print(n >>> i & 1);
4 }

说明:由于计算机中存储的都是数的补码,正数的原码、反码、补码都是相同的;而负数的原码、反码、补码是不一样的,补码=原码取反+1(符号位不变)。所以,负数是按照它的补码输出的。

>>>为逻辑移位符,向右移n位,高位补0
>> 算数移位符,也是向右移n位,不同的是:正数高位补0,负数高位补1

3.调用API函数

通过Integer.toBinaryString()方法实现。

1
2
3
4
5
6
public void function1(int n){
2 String result = Integer.toBinaryString(n);
3 //int r = Integer.parseInt(result);
4 //System.out.println(r);
5 System.out.println(result);
6 }
0%